﻿using Newtonsoft.Json;
using RestSharp;
using System.Timers;

namespace Runoi.StockQuantBrain
{
    /// <summary>
    /// 数据获取模块
    /// </summary>
    public class StockDataService
    {
        private readonly RestClient _client; // 创建 RestSharp 客户端，用于发送 HTTP 请求
        private System.Timers.Timer _timer;                // 定时器，用于定期获取股票数据
        private readonly string _stockCode;  // 股票代码

        public StockDataService(string stockCode)
        {
            _client = new RestClient("https://financialdata.net/api/v1/stock-symbols&key=acc1b5047489567db708615c6ae76b5d"); // 初始化客户端，设置 API 地址
            _stockCode = stockCode;
            InitializeTimer(); // 初始化定时器
        }

        /// <summary>
        /// 初始化定时器，设置定时获取数据的间隔
        /// </summary>
        private void InitializeTimer()
        {
            _timer = new System.Timers.Timer(60000); // 设置为每分钟获取一次数据
            _timer.Elapsed += OnTimerElapsed; // 定时器触发时执行 OnTimerElapsed 方法
            _timer.Start(); // 启动定时器
        }

        /// <summary>
        /// 定时器触发时执行的方法，负责获取股票分时数据
        /// </summary>
        private void OnTimerElapsed(object sender, ElapsedEventArgs e)
        {
            GetStockData(); // 调用 GetStockData 方法获取数据
        }

        /// <summary>
        /// 获取股票分时数据
        /// </summary>
        public void GetStockData()
        {
            var request = new RestRequest($"stocks/{_stockCode}/minute-data"); // 创建 HTTP 请求
            var response = _client.Execute(request); // 发送请求并获取响应

            if (response.IsSuccessful) // 检查响应是否成功
            {
                // 反序列化 JSON 数据到 MinuteData 对象
                var data = JsonConvert.DeserializeObject<MinuteData>(response.Content);
                // TODO: 处理分时数据，例如更新界面或存储到数据库
            }
            else
            {
                // 如果请求失败，记录错误信息
                LogHelper.LogError("Failed to get stock data.");
            }
        }
    }
    /// <summary>
    /// 分钟数据
    /// </summary>
    public class MinuteData
    {
        /// <summary>
        /// 分时价格列表
        /// </summary>
        public List<decimal> Prices { get; set; }
        /// <summary>
        /// 分时时间列表
        /// </summary>
        public List<DateTime> Times { get; set; } 
    }
}
